home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / cinefacts.de.ifs < prev    next >
Text File  |  2005-05-12  |  14KB  |  428 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=OL
  8. Title=Cinefacts.de
  9. Description=cinfacts.de import incl. Big/small Picture
  10. Site=www.cinefacts.de
  11. Language=DE
  12. Version=v0.1.2 -  11.05.2005
  13. Requires=3.5.0
  14. Comments=based on dvd-inside script by Tiziano Mⁿller||Script Option "BigPicture"  for loading Big / Small Picture |0 = load small picture|1= load big picture||
  15. License=
  16. GetInfo=1
  17.  
  18. [Options]
  19. BigPicture=1|1|0=import small picture|1=import big picture
  20.  
  21. ***************************************************)
  22.  
  23. program CineFactsDE;
  24.  
  25. const
  26.   CRLF = #13#10;
  27.  
  28. var
  29.   MovieName: string;
  30.   MovieURL: string;
  31.  
  32. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  33. var
  34.   i: Integer;
  35. begin
  36.   result := -1;
  37.   if StartAt < 0 then
  38.     StartAt := 0;
  39.   for i := StartAt to List.Count-1 do
  40.     if Pos(Pattern, List.GetString(i)) <> 0 then
  41.     begin
  42.       result := i;
  43.       Break;
  44.     end;
  45. end;
  46.  
  47. function MyTrim(str_: string): string;
  48. var
  49.   chars: array of char;
  50.   StrLen, i, LastSpacePos: integer;
  51. begin
  52.   result := '';
  53.  
  54.   str_ := StringReplace(str_, #9, '');
  55.   str_ := StringReplace(str_, #10, '');
  56.   str_ := StringReplace(str_, #13, '');
  57.  
  58.   while Pos(' ', str_) = 1 do
  59.   begin
  60.     Delete(str_, Pos(' ', str_), 1);
  61.   end;
  62.  
  63.   StrLen := Length(str_);
  64.   SetArrayLength(chars, StrLen);
  65.   for i := 0 to StrLen-1 do
  66.   begin
  67.     chars[i] := Copy(str_,i+1,1);
  68.   end;
  69.  
  70.   str_ := '';
  71.   LastSpacePos := StrLen - 1;
  72.   if LastSpacePos > -1 then
  73.   begin
  74.     while chars[LastSpacePos] = ' ' do
  75.     begin
  76.       LastSpacePos := LastSpacePos - 1;
  77.     end;
  78.     for i:= 0 to LastSpacePos do
  79.     begin
  80.       str_ := str_ + chars[i];
  81.     end;
  82.   end;
  83.  
  84.   str_ := StringReplace(str_, '  ', ' ');
  85.   while result <> str_ do
  86.   begin
  87.     result := str_;
  88.     str_ := StringReplace(str_, '  ', ' ');
  89.   end;
  90.   result := StringReplace(result, ' ,', ',');
  91.  
  92. end;
  93.  
  94. procedure CutAfter(var str_: string; Pattern: string);
  95. begin
  96.   str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_));
  97. end;
  98.  
  99. procedure CutBefore(var Str: string; Pattern: string);
  100. begin
  101.   Str := Copy(Str, Pos(Pattern, Str), Length(Str));
  102. end;
  103.  
  104. function GetStringBetween(str_, StartTag, EndTag: string): string;
  105. var
  106.   BeginPos, EndPos: integer;
  107. begin
  108.   result := '';
  109.   if EndTag = '' then
  110.   begin
  111.     EndPos := Length(str_);
  112.   end
  113.   else
  114.     EndPos := Pos(EndTag, str_);
  115.  
  116.   BeginPos := Pos(StartTag, str_) + Length(StartTag);
  117.   if StartTag = '' then BeginPos := 1;
  118.   if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos);
  119.  
  120. end;
  121.  
  122. function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string;
  123. begin
  124.   result := MyTrim(GetStringBetween(str_, StartTag, EndTag));
  125. end;
  126.  
  127. // Extracts single movie detail (like director, genre) from page
  128. function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
  129. begin
  130.   Result := '';
  131.   Page := StringReplace(Page, 'ß','▀');
  132.   // recognition tag - if present, extract detail from page, otherwise assume detail is not present
  133.   if Pos(StartTag, Page) > 0 then begin
  134.     CutBefore(Page, StartTag);
  135.     // optional cut tag helps finding right string in html page
  136.     if Length(CutTag) > 0 then
  137.       CutAfter(Page, CutTag);
  138.     // movie detail copied with html tags up to end string
  139.     Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
  140.     // remove html tags and decode html string
  141. //    HTMLRemoveTags(Result);
  142.     HTMLDecode(Result);
  143.   end;
  144. end;
  145.  
  146. function StripHTMLTags(str_: string): string;
  147. var
  148.   temp_char : char;
  149.   StrLen, i, CharPos : integer;
  150.   DoCopy : boolean;
  151. begin
  152.   DoCopy := true;
  153.   CharPos := 0;
  154.   result := '';
  155.   StrLen := Length(str_);
  156.   for i := 1 to StrLen do
  157.   begin
  158.     temp_char := Copy(str_,i,1);
  159.     if temp_char = '<' then
  160.     begin
  161.       DoCopy := false;
  162.       continue;
  163.     end
  164.     else if temp_char = '>' then
  165.     begin
  166.       DoCopy := true;
  167.       continue;
  168.     end
  169.     else
  170.     begin
  171.       if DoCopy then
  172.       begin
  173.         result := result + temp_char;
  174.       end;
  175.     end;
  176.   end;
  177.  
  178. end;
  179.  
  180. procedure AnalyzeIndexPage(Address: string);
  181. var
  182.   IndexPage: TStringList;
  183.   Page : String;
  184. begin
  185.   IndexPage := TStringList.Create;
  186.   Address := URLEncode(Address);
  187.   IndexPage.Text := GetPage(Address);
  188.  
  189.   PickTreeClear;
  190.   PickTreeAdd('Search results', '');
  191.   AddMoviesTitles(IndexPage);
  192.  
  193.   if PickTreeExec(Address) then
  194.   begin
  195.     Page := GetPage(Address);
  196.     AnalyzeMoviePage(Page, Address);
  197.   end;
  198.   IndexPage.Free;
  199. end;
  200.  
  201.  
  202.  
  203. procedure AnalyzeMoviePage(Page, Address :String);
  204. var
  205.   TomString, Line, Temp, Value: string;
  206.   LineNr, IntValue: Integer;
  207.   BeginPos, EndPos: Integer;
  208.  
  209.   StrPosition: Integer;
  210.   StrTemp,srcPic, MovieID: string;
  211.  
  212.   OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string;
  213.   VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string;
  214.   Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string;
  215.   Music, Screenplay: string;
  216.  
  217. begin
  218. // Initializing the very important Comments
  219.   Comments := '';
  220. // URL
  221.   SetField(fieldURL, Address);
  222.  
  223. // Translated title
  224.   TranslatedTitle := MyTrim(GetStringFromHTML(Page,'span class="headline">','">','<br>'));
  225.   SetField(fieldTranslatedTitle, TranslatedTitle);
  226.  
  227. // Original-Title, Country and Year
  228.   OriginalTitle := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','"first">','(<a href="'));
  229.   StrTemp := MyTrim(GetStringFromHTML(Page, '"land_list.php?name=','">','</dd>'));
  230.   StrTemp := StripHTMLTags(StrTemp);
  231.   StrTemp := GetTrimmedStringBetween(StrTemp,'(',')');
  232.   Country := Copy(StrTemp,1,Length(StrTemp)-4);
  233.   Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp));
  234.  
  235.   SetField(fieldOriginalTitle, OriginalTitle);
  236.   SetField(fieldCountry, Country);
  237.   SetField(fieldYear, Year);
  238.  
  239. // EAN-Number
  240.  
  241.   EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">EAN-Nummer:','', '</dd>')));
  242.   EAN_Number := StringReplace(EAN_Number,'EAN-Nummer:','');
  243.   Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF;
  244.  
  245. // Genre
  246.   Genre := '';
  247.   Genre := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Genre:', '', '</dd>')));
  248.   Genre := StringReplace(Genre,'Genre: ','');
  249.   setField(fieldCategory, Genre);
  250.  
  251. // Studio
  252.   Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Studio:','', '</dd>')));
  253.   Studio := StringReplace(Studio,'Studio: ','');
  254.   Comments := Comments + 'Studio: ' + Studio + CRLF;
  255.  
  256. // Distributor
  257.   Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Vertrieb:','', '</dd>')));
  258.   Distributor := StringReplace(Distributor,'Vertrieb: ','');
  259.   Comments := Comments + 'Vertrieb: ' + Distributor + CRLF;
  260.  
  261. // Altersfreigabe
  262.   AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">FSK:','', '</dd>')));
  263.   AFK := StringReplace(AFK,'FSK: ','');
  264.   Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF;
  265.  
  266. // CountryCode
  267.   Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Ländercode:','', '</dd>')));
  268.   Region := StringReplace(Region,'LΣndercode: ','');
  269.   VideoFormat := 'DVD Zone '+Region;
  270.   setField(fieldVideoFormat,VideoFormat);
  271.  
  272. // Duration
  273.   Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">LΣnge:','', '</dd>')));
  274.   Duration := StringReplace(Duration,'LΣnge: ','');
  275.   Duration := StringReplace(Duration,' Minuten','');
  276.   setField(fieldLength,Duration);
  277.  
  278. // Description
  279.   Description := GetStringFromHTML(Page, '<li class="text c1">','', '</li>');
  280.   Description := StringReplace(Description, '<br />','*');
  281.   Description := MyTrim(StripHTMLTags(Description));
  282.   Description := StringReplace(Description, '*',CRLF);
  283.   setField(fieldDescription,Description);
  284.  
  285. // Actors
  286.   Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Schauspieler:','', '</dd>')));
  287.   Cast := StringReplace(Cast,'Schauspieler: ','');
  288.   setField(fieldActors,Cast);
  289.  
  290. // Director
  291.   Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Regie:','', '</dd>')));
  292.   Director := StringReplace(Director,'Regie: ','');
  293.   setField(fieldDirector,Director);
  294.  
  295. // Production
  296.   Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Produzent:','', '</dd>')));
  297.   Producer := StringReplace(Producer,'Produzent: ','');
  298.   setField(fieldProducer,Producer);
  299.  
  300. // Music
  301.   Music := '';
  302.   Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Musik:','', '</dd>')));
  303.   Music := StringReplace(Music,'Musik:','');
  304.   Music := StringReplace(Music,' Minuten','');
  305.   Comments := Comments + 'Musik:' + Music + CRLF;
  306.  
  307. // Screenplay
  308.   Screenplay := '';
  309.   Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Drehbuch:','', '</dd>')));
  310.   Screenplay := StringReplace(Screenplay,'Drehbuch: ','');
  311.   Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF;
  312.  
  313. // Screen format & system
  314.   ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Format:','', '</dd>')));
  315.   ScreenFormat := StringReplace(ScreenFormat,'Format: ','');
  316.   ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">System:','', '</dd>')));
  317.   ScreenSystem := StringReplace(ScreenSystem,'System: ','');
  318.   setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat);
  319.  
  320. // Audioformat/Language
  321.   AudioFormat := '';
  322.   Language := '';
  323.   StrTemp := GetStringFromHTML(Page, '<dt class="c1">Tonformat:', '', '<dt class="c1">Untertitel:');
  324.  
  325.   StrTemp := StringReplace(StrTemp, '</dd>','*');
  326.   StrTemp := MyTrim(StripHTMLTags(StrTemp));
  327.   StrTemp := StringReplace(StrTemp,'Tonformat: ','');
  328.  
  329.   while Pos('*',StrTemp) > 0 do
  330.   begin
  331.     AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp)));
  332.     Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4)));
  333.     CutAfter(StrTemp,'*');
  334.   end;
  335.   AudioFormat := Copy(AudioFormat,3,Length(AudioFormat));
  336.   Language := Copy(Language,3,Length(Language));
  337.  
  338.   setField(fieldAudioFormat, AudioFormat);
  339.   setField(fieldLanguages, Language);
  340.  
  341. // Subtitles
  342.   Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Untertitel:', '', '</dd>')));
  343.   Subtitle := StringReplace(Subtitle,'Untertitel: ','');
  344.   if Subtitle = 'Keine Untertitel' then Subtitle := '';
  345.   setField(fieldSubtitles, Subtitle);
  346.  
  347. // Mediatype
  348.   MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Medientyp:','', '</dd>')));
  349.   MediaType := StringReplace(MediaType,'Medientyp: ','');
  350.   setField(fieldMediaType, MediaType);
  351.  
  352. // Disks
  353.   Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Medienanzahl:','', '</dd>')));
  354.   Disks := StringReplace(Disks,'Medienanzahl: ','');
  355.   setField(fieldDisks, Disks);
  356.  
  357. // Package
  358.   Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, '<dt class="c1">Verpackung:', '', '</dd>')));
  359.   Packaging := StringReplace(Packaging,'Verpackung:','');
  360.   Comments := Comments + 'Verpackung: ' + Packaging + CRLF;
  361.  
  362. // Bonusmaterial
  363.   Bonusmaterial := MyTrim(GetStringFromHTML(Page, ' BONUS-MATRIAL </li>', '', '</ul>'));
  364.   Bonusmaterial := StringReplace(Bonusmaterial,'</span>','*');
  365.   Bonusmaterial := StringReplace(Bonusmaterial,'<li>','-');
  366.   Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial));
  367.   Bonusmaterial := StringReplace(Bonusmaterial,'BONUS-MATRIAL','');
  368.   Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF);
  369.   Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF;
  370.   setField(fieldComments,Comments);
  371.   if CanSetPicture then
  372.   begin
  373.     MovieID := Copy(Address,Pos('?id=',Address)+4,Length(Address));
  374.     if GetOption('BigPicture') = 1 then
  375.       srcPic := 'http://www.cinefacts.de/bild.php?id=' + MovieID + '&type=db&studio=' + StringReplace(Studio,' ','')
  376.     else
  377.       srcPic := 'http://www.cinefacts.de/bild.php?id=' + MovieID + '&type=ds&studio=' + StringReplace(Studio,' ','');
  378.     GetPicture(srcPic);
  379.   end;
  380.   //DisplayResults;
  381. end;
  382.  
  383. procedure AddMoviesTitles(ResultsPage: TStringList);
  384. var
  385.   Page,str_: string;
  386.   sNr,pNr,aPage : Integer;
  387.   MovieTitle, MovieAddress: String;
  388. begin
  389.   Page := ResultsPage.Text;
  390.   snr := 0;
  391.   str_ := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Anzahl Ergebnisse gesamt:', '', '</li>')));
  392.   str_ := StringReplace(str_,'Anzahl Ergebnisse gesamt: ','');
  393.   pNr := StrToInt(StringReplace(str_,')',''),1);
  394.   aPage := 1;
  395.   while sNr < pNr do
  396.   begin
  397.     while Pos('details.php?id=', Page) > 0 do
  398.     begin
  399.       CutBefore(Page, 'details.php?id=');
  400.       MovieAddress := 'http://www.cinefacts.de/dvd/db/' + GetStringFromHTML(Page, 'details.php?id=', '', '"');
  401.       MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php?id=', '">', '</tr>'));
  402.       MovieTitle := StringReplace(MovieTitle, '</td>', ' | ');
  403.       MovieTitle := MyTrim(StripHTMLTags(MovieTitle));
  404.       CutAfter(Page, '</tr>');
  405.       PickTreeAdd(MovieTitle, MovieAddress);
  406.     end;
  407.     sNr := sNr + 50;
  408.     aPage := aPage + 1;
  409.     if sNr < pNr then
  410.     Page := GetPage(URLEncode('http://www.cinefacts.de/dvd/suche.php?akseite='+IntToStr(aPage)+'&startwert='+IntToStr(sNr)+'&name='+MovieName));
  411.   end;
  412. end;
  413.  
  414. begin
  415.   if CheckVersion(3,5,0) then
  416.   begin
  417.     MovieName := GetField(fieldTranslatedTitle);
  418.     if MovieName = '' then
  419.       MovieName := GetField(fieldOriginalTitle);
  420.     if Input('cinefacts.de Import', 'Filmtitel eingeben:', MovieName) then
  421.     begin
  422.       AnalyzeIndexPage('http://www.cinefacts.de/dvd/suche.php?name='+MovieName+'&go.x=0&go.y=0');
  423.     end;
  424.   end
  425.   else
  426.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  427. end.
  428.